#include "App.h"
#include "GPIO.h"
#include "UART.h"
#include "NVIC.h"
#include "Switch.h"

// 初始化
void App_voiceModule_Init(void)
{

    COMx_InitDefine COMx_InitStructure;

    P5_MODE_IO_PU(GPIO_Pin_0 | GPIO_Pin_1);
    // uart3 语音
    COMx_InitStructure.UART_Mode = UART_8bit_BRTx;  // 模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
    COMx_InitStructure.UART_BRT_Use = BRT_Timer3;   // 选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
    COMx_InitStructure.UART_BaudRate = 9600ul;      // 波特率, 一般 110 ~ 115200
    COMx_InitStructure.UART_RxEnable = ENABLE;      // 接收允许,   ENABLE或DISABLE
    COMx_InitStructure.BaudRateDouble = DISABLE;    // 波特率加倍, ENABLE或DISABLE
    UART_Configuration(UART3, &COMx_InitStructure); // 初始化串口1 UART1,UART2,UART3,UART4

    NVIC_UART3_Init(ENABLE, Priority_1); // 中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
    UART3_SW(UART3_SW_P50_P51);          // 引脚选择, UART3_SW_P00_P01,UART3_SW_P50_P51       // 引脚选择, UART3_SW_P00_P01,UART3_SW_P50_P51
}

// 接收数据
void App_voiceModule_Receive(u8 *ArrayDate)
{
    u8 i;
    for (i = 0; i < 8; i++)
    {
        printf("%02X ", (int)ArrayDate[i]);
    }
    // 冲锋
    if (ArrayDate[1] == 02)
    {
        os_create_task(TASK_PCAServo1);
        printf("是否执行冲锋动作?\n");
    }
    else if (ArrayDate[1] == 03)
    {
        os_create_task(TASK_PCAServo2);
        printf("是否执行退下动作?\n");
    }
    // 动一动
    if (ArrayDate[0] == 04)
    {
        os_create_task(TASK_PCAServo4);
        printf("是否执行动一动动作?\n");
    }
    // 起立
    if (ArrayDate[0] == 05)
    {
        os_create_task(TASK_PCAServo5);
        printf("是否执行起立动作?\n");
    }
    // 有敌人
    if (ArrayDate[0] == 06)
    {
        os_create_task(TASK_PCAServo6);
        printf("是否执行有敌人动作?\n");
    }
    // 先左走
    if (ArrayDate[0] == 07)
    {
        os_create_task(TASK_PCAServo7);
        printf("是否执行左动作?\n");
    }
    // 先右走
    if (ArrayDate[0] == "08")
    {
        os_create_task(TASK_PCAServo8);
        printf("是否执行右走动作?\n");
    }
    // 打招呼
    if (ArrayDate[0] =="09")
    {
        os_create_task(TASK_PCAServo9);
        printf("是否执行打招呼动作?\n");
    }
    // 跳舞
    if (ArrayDate[0] == 10)
    {
        os_create_task(TASK_PCAServo10);
        printf("是否执行跳舞动作?\n");
    }
    // 不准动
    if (ArrayDate[0] == 22)
    {
        os_create_task(TASK_PCAServo11);
        printf("是否执行不准动动作?\n");
    }
}

// 任务12是语音模块
void task_TASK_speerch() _task_ TASK_SPEERCH
{
    u8 i;
    while (1)
    {
        if (COM3.RX_TimeOut > 0)
        {
            // 超时计数
            if (--COM3.RX_TimeOut == 0)
            {
                if (COM3.RX_Cnt > 0)
                {
                    for (i = 0; i < COM3.RX_Cnt; i++)
                    {
                        // 根据接收到的内容，进行特定动作
                        App_voiceModule_Receive(&RX3_Buffer[i]);
                        TX1_write2buff(RX3_Buffer[i]);
                    }
                }
                COM3.RX_Cnt = 0;
            }
        }
        os_wait2(K_TMO, 4); // 5ms * 4
    }
}
